#include<stdio.h>
#include<string.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>
#include<sys/wait.h>
void handler(int signo)
{
  printf("get a signo:%d \n",signo);
  int ret=0;
  while((ret=waitpid(-1,NULL,WNOHANG))>0)
  {
    printf("wait child %d success \n",ret);
  }
}

int main()
{
  signal(17,handler);
  
  if(fork()==0)
  {
    printf("child %d is running,begin dead!\n",getpid());
    sleep(4);
    exit(1);
  }
  while(1);
  
  return 0;
}

//关键字：volatile:禁止优化到寄存器，达到稳定访问内存的目的 
//volatile int flag=0;
//
//void handler(int signo)
//{
//  printf("get signo:%d \n",signo);
//  flag=1;
//}
//
//int main()
//{
//  signal(2,handler);
//  while(!flag);
//  printf("Proc Normal Quit! \n");
//
//  return 0;
//}


//sigaction 的使用
//struct sigaction act,oact;
//void handler(int signo)
//{
//  printf("get a signo: %d\n",signo);
//  sigaction(SIGINT,&oact,NULL);
//}
//int main()
//{
//  memset(&act,0,sizeof(act));
//  memset(&oact,0,sizeof(oact));
//  act.sa_handler=handler;
//  act.sa_flags=0;
//  sigemptyset(&act.sa_mask);
//  sigaction(SIGINT,&act,&oact);
//  while(1){
//    printf("I am a process! \n");
//    sleep(1);
//  }
//  return 0;
//}
